/*
 *  Wrapper for rtems_task_create
 *
 *  $ID$
 */

#include "trace_log.h"
#include "trace_trigger.h"

typedef enum { RTEMS_SUCCESSFUL, RTEMS_TASK_EXITTED, RTEMS_MP_NOT_CONFIGURED, RTEMS_INVALID_NAME, RTEMS_INVALID_ID, RTEMS_TOO_MANY, RTEMS_TIMEOUT, RTEMS_OBJECT_WAS_DELETED, RTEMS_INVALID_SIZE, RTEMS_INVALID_ADDRESS, RTEMS_INVALID_NUMBER, RTEMS_NOT_DEFINED, RTEMS_RESOURCE_IN_USE, RTEMS_UNSATISFIED, RTEMS_INCORRECT_STATE, RTEMS_ALREADY_SUSPENDED, RTEMS_ILLEGAL_ON_SELF, RTEMS_ILLEGAL_ON_REMOTE_OBJECT, RTEMS_CALLED_FROM_ISR, RTEMS_INVALID_PRIORITY, RTEMS_INVALID_CLOCK, RTEMS_INVALID_NODE, RTEMS_NOT_CONFIGURED, RTEMS_NOT_OWNER_OF_RESOURCE, RTEMS_NOT_IMPLEMENTED, RTEMS_INTERNAL_ERROR, RTEMS_NO_MEMORY, RTEMS_IO_ERROR, RTEMS_PROXY_BLOCKING } rtems_status_code;

rtems_status_code  __real_rtems_task_create(
  long unsigned int name,
  long unsigned int initial_priority,
  long unsigned int stack_size,
  long unsigned int initial_modes,
  long unsigned int attribute_set,
  long unsigned int *id
)
;

rtems_status_code  __wrap_rtems_task_create(
  long unsigned int name,
  long unsigned int initial_priority,
  long unsigned int stack_size,
  long unsigned int initial_modes,
  long unsigned int attribute_set,
  long unsigned int *id
)
{
  rtems_status_code ret;
  bool bTrig = isTriggered("rtems_task_create");
  if (bTrig)
  {
    trace_log("rtems_task_create entered\n");
    trace_log("  name = %d\n", name);
    trace_log("  initial_priority = %d\n", initial_priority);
    trace_log("  stack_size = %d\n", stack_size);
    trace_log("  initial_modes = %d\n", initial_modes);
    trace_log("  attribute_set = %d\n", attribute_set);
    trace_log("  *id = %d\n", *id);
  }
  ret = __real_rtems_task_create(
    name,
    initial_priority,
    stack_size,
    initial_modes,
    attribute_set,
    id
  );
  if (bTrig)
  {
    trace_log("rtems_task_create returned\n");
    trace_log("  name = %d\n", name);
    trace_log("  initial_priority = %d\n", initial_priority);
    trace_log("  stack_size = %d\n", stack_size);
    trace_log("  initial_modes = %d\n", initial_modes);
    trace_log("  attribute_set = %d\n", attribute_set);
    trace_log("  *id = %d\n", *id);
  }
  return ret;
}
